package com.su.song.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity_calculator extends AppCompatActivity implements View.OnClickListener {

    private TextView tv_result;

    private String firstTxt = "";//第一个操作数
    private String operat = "";//第一个运算符号
    private String secendTxt = "";//第二个操作数
    private String result = "";//运算结果
    private String show_Text = "";//显示界面




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_calculator);
        tv_result = findViewById(R.id.tv_result);
//获取文本视图，并设置点击事件
        findViewById(R.id.add).setOnClickListener(this);
        findViewById(R.id.subtract).setOnClickListener(this);
        findViewById(R.id.multiple).setOnClickListener(this);
        findViewById(R.id.division).setOnClickListener(this);
        findViewById(R.id.clear).setOnClickListener(this);
        findViewById(R.id.dot).setOnClickListener(this);
        findViewById(R.id.back).setOnClickListener(this);
        findViewById(R.id.equal).setOnClickListener(this);
        findViewById(R.id.by1).setOnClickListener(this);
        findViewById(R.id.zero).setOnClickListener(this);
        findViewById(R.id.one).setOnClickListener(this);
        findViewById(R.id.two).setOnClickListener(this);
        findViewById(R.id.three).setOnClickListener(this);
        findViewById(R.id.four).setOnClickListener(this);
        findViewById(R.id.five).setOnClickListener(this);
        findViewById(R.id.six).setOnClickListener(this);
        findViewById(R.id.seven).setOnClickListener(this);
        findViewById(R.id.eight).setOnClickListener(this);
        findViewById(R.id.nine).setOnClickListener(this);
        findViewById(R.id.sqrt).setOnClickListener(this);
        ;
    }

    @Override
    public void onClick(View v) {
        String inputText;
        //如果是开根号按钮
       if(v.getId() == R.id.sqrt){
           inputText = "√";
       }
       else {
           inputText = ((TextView)v).getText().toString();//转换成文本视图形式并获取输入
       }
       switch (v.getId()){
           //清空
           case R.id.clear:
               clear();
               break;
               //加减乘除
           case R.id.add:
           case R.id.subtract:
           case R.id.multiple:
           case R.id.division:
               operat = inputText;
               refresh(show_Text + operat);
               break;
               //等于
           case R.id.equal:
               double calculator_result = calculator();
               refreshoperat(String.valueOf(calculator_result));//将结果转换成字符串,并将上一次结果存储起来
               refresh(show_Text + "=" + result);
               break;
               //求开发
           case R.id.sqrt:
               double sqrt_result = Math.sqrt(Double.parseDouble(firstTxt));
               refreshoperat(String.valueOf(sqrt_result));//将结果转换成字符串,并将上一次结果存储起来
               refresh(show_Text + "√=" + result);
               break;
               //求倒数
           case R.id.by1:
               double by1_result = 1.0 / Double.parseDouble(firstTxt);
               refreshoperat(String.valueOf(by1_result));//将结果转换成字符串,并将上一次结果存储起来
               refresh(show_Text + "/=" + result);
               break;
               //点击了数字和其他按钮
           default:
               if(result.length() > 0 && operat.equals("0")){
                   clear();
               }
               if(operat == ""){
                   firstTxt = firstTxt + inputText;
               }
               else {
                   secendTxt = secendTxt + inputText;
               }
               //当前面为0或不为点时不拼接
               if(show_Text.equals("0") && !inputText.equals(".")){
                   refresh(inputText);
               }
               else {
                   refresh(show_Text + inputText);
               }
               break;

       }

    }

    private double calculator() {
        switch (operat){
            case "+":
                return Double.parseDouble(firstTxt) + Double.parseDouble(secendTxt);

            case "-":
                return Double.parseDouble(firstTxt) - Double.parseDouble(secendTxt);

            case "*":
                return Double.parseDouble(firstTxt) * Double.parseDouble(secendTxt);

            default:
                return Double.parseDouble(firstTxt) / Double.parseDouble(secendTxt);
        }

    }

    //清空并初始化
    private void clear() {
        refreshoperat("");
        refresh("");
    }
    //刷新运算结果
    public void refreshoperat(String new_result){
        result = new_result;
        firstTxt = result;
        secendTxt = "";
        operat = "";
    }

    public void refresh(String Text){
        show_Text = Text;
        tv_result.setText(show_Text);
    }
}